/* Copyright 2001,2002,2003 NAH6
 * All Rights Reserved
 *
 * Parts Copyright DoD, Parts Copyright Starium
 *
 */
#include "celpfilt.h"
#include "lp_syn.h"
#include "lsftopc.h"
#include "move_array16.h"

/**************************************************************************
*                                                                         *
* ROUTINE
*               LP_Synthesis
*
* FUNCTION
*               LP Filter input excitation with input LSFs
* SYNOPSIS
*               LP_Synthesis(excitation, lsf, frame_num, speech)
*
*   formal
*
*                       data    I/O
*       name            type    type    function
*       -------------------------------------------------------------------
*       excitation      int      i      excitation vector
*       lsf             int      i      line spectral frequencies
*       frame_num       int      i      frame number of speech
*       speech          fxpt_16  o      output speech
*
**************************************************************************/
FILTER  LP_Filt;

void LP_Synthesis(
fxpt_16 excitation[SF_LEN],     /* 15.0 format */
fxpt_16 lsf[ORDER],             /* 0.15 format */
fxpt_16 speech[SF_LEN])         /* 15.0 format */
{
        fxpt_16 pc[ORDER+1];    /* 2.13 format */

        /*  Convert input LSFs to PCs */
        LSFtoPC(lsf, pc);

        /*  Perform LP synthesis on excitation to produce speech */
        MoveArray16(speech, excitation, SF_LEN);
        do_pfilt_dynamic(&LP_Filt, pc, speech);
}
